https://prometheus.io/download/# 下载 Prometheuswget https://github.com/prometheus/prometheus/releases/download/v2.3.0/prometheus-2.3.0.linux-amd64.tar.gz# 解压文件tar -zxvf prometheus-2.3.0.linux-amd64.tar.gzcd prometheus-2.3.0.linux-amd64
解压后的目录包含以下主要文件和目录:
prometheuspromtoolprometheus.ymlrules&targetll rules/
ll target/node/
consoles/# 启动 Prometheusnohup ./prometheus --config.file=prometheus.yml \--web.enable-lifecycle \--web.listen-address=192.168.1.139:8001 &
我这里用的是8001,浏览器访问地址http://192.168.1.139:8001cd /opt/soft/#解压tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz#进入安装目录cd /opt/soft/node_exporter-1.3.1.linux-amd64#启动 (collector.textfile.directory 存放自定义指标数据最后会有使用说明)nohup ./node_exporter --collector.textfile.directory=./key &
http://127.0.0.1:9100/metrics,若返回类似以下内容,说明 Node Exporter 已正常工作:# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.# TYPE go_gc_duration_seconds summarygo_gc_duration_seconds{quantile="0"} 1.6425e-05go_gc_duration_seconds{quantile="0.25"} 3.4856e-05go_gc_duration_seconds{quantile="0.5"} 5.8672e-05go_gc_duration_seconds{quantile="0.75"} 8.4572e-05go_gc_duration_seconds{quantile="1"} 0.000452457go_gc_duration_seconds_sum 12.595550358go_gc_duration_seconds_count 185069# HELP go_goroutines Number of goroutines that currently exist.# TYPE go_goroutines gaugego_goroutines 7# HELP go_info Information about the Go environment.
Prometheus 的配置文件是 YAML 格式的
# my global configglobal:scrape_interval: 15s # 抓取(scrape)间隔时间, 默认是1分钟evaluation_interval: 15s # 规则评估间隔默认也是 1 分钟
Alertmanager配置
# Alertmanager configurationalerting:alertmanagers:- static_configs:- targets:- 127.0.0.1:9093 #这里配置Alertmanager的地址
3.2 规则配置
rule files是支持自定义的,为了清晰区分不同的告警规则,可以不同的规则文件
作用:定义触发报警的规则条件,prometheus 会加载rules下的所有规则文件里定义的规则条件# 加载规则一次,并根据全局“evaluation_interval”定期对其进行评估rule_files:- /data/prometheus-2.3.0.linux-amd64/rules/*.rules- /data/prometheus-2.3.0.linux-amd64/rules/*.yml#*.yml、*.rules代表所有此后缀的文件如1.rules、2.rules
3.3 端点以及被监控的node_export配置
为了方便维护,可以以不同的项目,或者按业务类型,创建不同的目录为每个应用创建单独的配置文件#需要注意下metrics_path,node_export默认是/metrics可以不写,这里例子监控的是java后端,java接入prometheus指标端点是/actuator/prometheus所以就配置的/actuator/prometheus # 获取指标数据就这样访问“http://127.0.0.1:8080/actuator/prometheus”- job_name: 'application' #这个任务下的指标都会自动加一个标签 `job="application"`metrics_path: /actuator/prometheus#file_sd_configs文件服务发现"机制来动态发现监控目标#优点:新增或者关闭监控目标不用重启Prometheusfile_sd_configs:- files: #定义被监控的node_export配置文件存放路径- "/data/app/monitor/prometheus-2.3.0.linux-amd64/target/app/*.json"refresh_interval: 6s # 文件发现服务刷新时间
global:scrape_interval: 15sevaluation_interval: 15salerting:alertmanagers:- static_configs:- targets:- 127.0.0.1:9093rule_files:- /data/prometheus-2.3.0.linux-amd64/rules/*.rules- /data/prometheus-2.3.0.linux-amd64/rules/*.ymlscrape_configs:#prometheus自己- job_name: 'prometheus'static_configs:- targets: ['192.168.1.139:8001']labels:instance: prometheus- job_name: 'node' #存放node-export的配置file_sd_configs:- files:- "/data/prometheus-2.3.0.linux-amd64/target/node/*.json"refresh_interval: 6s- job_name: 'application' #后端业务应用的配置metrics_path: /actuator/prometheusfile_sd_configs:- files:- "/data/prometheus-2.3.0.linux-amd64/target/application/*.json"refresh_interval: 6s
#targets 目标主机地址#labels 监控目标主机的标签,结合altermannger通知模版这些标签可以展示到告警通知的内容里[root@test node]# cat 192.168.1.139.json[{"targets": ["192.168.1.139:9100"],"labels": {"env": "test","servicename": "测试","hostname": "测试机"}}]创建好后将文件放在/data/prometheus-2.3.0.linux-amd64/target/application/下,prometheus定时扫描会自动加载被监控端的配置
访问http://192.168.1.139:8001, 看到192.168.1.139:9100已经加过来了
[root@test rules]# cat zidingyi.rulesgroups: # 规则组- name: port # 规则组的名称- alert: nexus(私服) #告警名称expr: nexus == 0# for: 1m #持续多久后发送 # 不设置持续时间,默认为0会直接 Inactive 状态转换成 Firing状态,然后触发警报labels:severity: "紧急"annotations: #信息summary: "端口不通"description: "模版测试收到请忽略"#将文件zidingyi.rules放到/data/prometheus-2.3.0.linux-amd64/rules/#路径下
cat /opt/soft/node_exporter-1.3.1.linux-amd64/key/key_runner.sh#!/bin/bashecho "nexus" `netstat -tunlp|grep 8082|wc -l`#当8082不存在时会打印0#我们监控规则里定义 expr: nexus == 0 时发送通知
*/1 * * * * /bin/bash /opt/soft/node_exporter-1.3.1.linux-amd64/key/key_runner.sh >/opt/soft/node_exporter-1.3.1.linux-amd64/key/key.promkey.prom, 格式是nexus 1 或者 nexus 0#告警规则里会根据0 1区分是否发送通知
node_export会收集启动时要指定collector.textfile.directory 注:本文内容为技术经验总结仅供参考。实际部署时,请结合自身业务场景、环境特性及安全要求调整配置,操作前建议备份关键数据并在测试环境验证